package com.usdt.system.dto.cp;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.enums.BooleanEnum;
import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;
import com.alibaba.fastjson2.JSON;

import lombok.Data;

/**
 * 活动信息Excel导出DTO（映射Excel表头）
 * 说明：@ExcelProperty的index属性必须与Excel列顺序一致（0开始）
 */
@Data
@ContentRowHeight(15)//高度(自动换行后，隐藏多余数据)
//自动换行  水平居中  垂直居中
//@ContentStyle(wrapped = BooleanEnum.TRUE,horizontalAlignment = HorizontalAlignmentEnum.CENTER,verticalAlignment = VerticalAlignmentEnum.CENTER)
//自动换行 垂直居中
@ContentStyle(wrapped = BooleanEnum.TRUE,verticalAlignment = VerticalAlignmentEnum.CENTER)
public class ActivityListExcelDTO implements Serializable {
    private static final long serialVersionUID = 1L;

    // 活动时间（A列，索引0）：日期时间类型，指定输出格式为“yyyy-MM-dd HH:mm:ss”
    @ExcelProperty(index = 0, value = "活动时间")
    @DateTimeFormat("yyyy-MM-dd HH:mm")
    @ColumnWidth(20) // 列宽：20个字符（对应“2025-08-24 12:00:00”的长度）
    //@ContentStyle(wrapped = BooleanEnum.TRUE)
    private LocalDateTime activityTime;

    // 活动维度（B列，索引1）：字符串类型
    @ExcelProperty(index = 1, value = "活动维度")
    private String activityCategoryStr;

    // 活动类别（C列，索引2）：字符串类型
    @ExcelProperty(index = 2, value = "活动类别")
    private String activityTypeStr;

    // 名称（D列，索引3）：字符串类型
    @ExcelProperty(index = 3, value = "名称")
    @ColumnWidth(20)
    @ContentStyle(wrapped = BooleanEnum.TRUE)
    private String name;

    // 活动时长（E列，索引4）：整数类型（如“2小时”→2）
    @ExcelProperty(index = 4, value = "活动时长")
    private BigDecimal activityDuration;

    // 活动时长单位（F列，索引5）：字符串类型（如“小时”“分钟”）
    @ExcelProperty(index = 5, value = "活动时长单位")
    private String activityDurationUnitSt;

    // 准备时长（G列，索引6）：整数类型（如“1小时”→1）
    @ExcelProperty(index = 6, value = "准备时长")
    private BigDecimal activityPreparationDuration;

    // 准备时长单位（H列，索引7）：字符串类型
    @ExcelProperty(index = 7, value = "准备时长单位")
    private String activityPreparationDurationUnitStr;

    // 活动地点（I列，索引8）：字符串类型（如“会议室A”）
    @ExcelProperty(index = 8, value = "活动地点")
    @ColumnWidth(20)
    private String activityAddress;

    // 人数限制（J列，索引9）：整数类型（如“50人”→50）
    @ExcelProperty(index = 9, value = "人数限制")
    private BigDecimal activityPeopleLimited;

    // 材料资源（K列，索引10）：字符串类型（如“投影仪,麦克风”）
    @ExcelProperty(index = 10, value = "材料资源")
    @ColumnWidth(30)
    private String activityResourc;

    // 环境/场地（L列，索引11）：字符串类型（如“室内”“户外”）
    @ExcelProperty(index = 11, value = "环境/场地")
    @ColumnWidth(30)
    private String activityVenue;

    // 负责人（M列，索引12）：字符串类型（如“张三”）
    @ExcelProperty(index = 12, value = "负责人")
    private String activityWriter;

    // 流程说明（N列，索引13）：字符串类型（如“1. 签到→2. 开场→3. 互动”）
    @ExcelProperty(index = 13, value = "流程说明")
    @ColumnWidth(30)
    //@ContentStyle(wrapped = BooleanEnum.TRUE) // 自动换行（内容超过列宽时折行显示）
    private String activityProcessDescriptionStr;

    // 注意事项（O列，索引14）：字符串类型（如“请勿迟到”）
    @ExcelProperty(index = 14, value = "注意事项")
    @ColumnWidth(20)
    @ContentStyle(wrapped = BooleanEnum.TRUE)
    private String activtyNotes;

    // 禁忌（P列，索引15）：字符串类型（如“禁止吸烟”）
    @ExcelProperty(index = 15, value = "禁忌")
    @ColumnWidth(20)
    @ContentStyle(wrapped = BooleanEnum.TRUE)
    private String activtyTaboo;

    // 积分（Q列，索引16）：整数类型（如“10分”→10）
    @ExcelProperty(index = 16, value = "积分")
    private Byte activtyPoints;
    
    @ExcelProperty(index = 17, value = "参与人员")
    @ColumnWidth(20)
    private String customers;
    
    @ExcelIgnore
    private String activityProcessDescriptionJson;
    
    @ExcelIgnore
    private Integer id;
    
    public String getActivityProcessDescriptionStr(){
    	if (StringUtils.isNotBlank(activityProcessDescriptionJson)) {
    		List<String> array = JSON.parseArray(activityProcessDescriptionJson, String.class);
    		return String.join("\n", array);
		}
        return "";
    }
}
